package model

import (
	"fmt"
	"time"

	"github.com/bear/wolf/config"
	"golang.org/x/crypto/bcrypt"
	"gorm.io/gorm"
)

// User 用户模型
type UserInfo struct {
	Id		 int	`json:"id"`
	Username string `json:"username"`
	Password string `gorm:"column:password" json:"-"`
	RealName string `gorm:"column:real_name" json:"realname"`
	DepartId int	`gorm:"column:depart_id" json:"departId"`
	UseType	 int 	`gorm:"column:use_type" json:"useType"`
	LeaveType int 	`gorm:"column:leave_type" json:"leaveType"`
	CreateAt time.Time 	`gorm:"column:create_at" json:"createAt"`
	UpdateAt time.Time 	`gorm:"column:update_at" json:"updateAt"`
}

// 自定义表名
func (u *UserInfo) TableName() string {
	return "user_info"
}

func (u *UserInfo) BeforeCreate(tx *gorm.DB) error {
    u.CreateAt = time.Now()
    u.UpdateAt = time.Now()
    return nil
}

// BeforeSave 保存前的钩子，用于密码加密，和 设置默认值
func (u *UserInfo) BeforeSave(tx *gorm.DB) error {
	// 如果密码有修改，则进行加密
	if len(u.Password) > 0 {
		hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u.Password), bcrypt.DefaultCost)
		if err != nil {
			return err
		}
		u.Password = string(hashedPassword)
	}
	u.UpdateAt = time.Now()
	return nil
}

// Create 创建新用户
func CreateUser(u *UserInfo) error {
	return config.DB.Create(u).Error
}
//教研username 是否存在
func GetUserByUsername(username string) (*UserInfo,error){
	var user UserInfo
	result := config.DB.Where("username= ?",username).First(&user)
	// utils.Print2Json(user)
	if result.Error !=nil{
		return nil,result.Error
	}
	return &user,nil
}

// CheckPassword 验证密码
// CheckPassword 验证密码
func CheckPassword(password string,hashPassword string) bool{
	err := bcrypt.CompareHashAndPassword([]byte(hashPassword), []byte(password))
	fmt.Printf("%#v\n", err) 
	return err == nil
}

func GetUserNameById(userId int)string{
	var userinfo UserInfo
	config.DB.Where("id = ?",userId).First(&userinfo)

	// 用逗号拼接所有用户名
	return userinfo.Username
}  

